home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gnugo1_1.lha / gnugo / findwinr.c < prev    next >
C/C++ Source or Header  |  1989-03-07  |  3KB  |  104 lines

  1. /*
  2.                 GNU GO - the game of Go (Wei-Chi)
  3.                 Version 1.1   last revised 3-1-89
  4.            Copyright (C) Free Software Foundation, Inc.
  5.                       written by Man L. Li
  6.                       modified by Wayne Iba
  7.                     documented by Bob Webber
  8. */
  9. /*
  10. This program is free software; you can redistribute it and/or modify
  11. it under the terms of the GNU General Public License as published by
  12. the Free Software Foundation - version 1.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License in file COPYING for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with this program; if not, write to the Free Software
  21. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23. Please report any bug/fix, modification, suggestion to
  24.  
  25. mail address:   Man L. Li
  26.                 Dept. of Computer Science
  27.                 University of Houston
  28.                 4800 Calhoun Road
  29.                 Houston, TX 77004
  30.  
  31. e-mail address: manli@cs.uh.edu         (Internet)
  32.                 coscgbn@uhvax1.bitnet   (BITNET)
  33.                 70070,404               (CompuServe)
  34. */
  35.  
  36. #include <stdio.h>
  37.  
  38. #define EMPTY 0
  39.  
  40. extern unsigned char p[19][19], l[19][19];
  41. extern int mymove, umove;
  42. extern int lib;
  43.  
  44. findwinner(i, j, val)
  45. /* find opponent piece to capture or attack */
  46. int *i, *j, *val;
  47. {
  48.  int m, n, ti[3], tj[3], tval, ct, u, v, lib1;
  49.  
  50.  *i = -1;   *j = -1;   *val = -1;
  51.  
  52. /* find opponent with liberty less than four */
  53.  for (m = 0; m < 19; m++)
  54.    for (n = 0; n < 19; n++)
  55.      if ((p[m][n] == umove) && (l[m][n] < 4))
  56.        {
  57.     ct = 0;
  58.     initmark();
  59.     if (findopen(m, n, ti, tj, umove, l[m][n], &ct))
  60.       {
  61.        if (l[m][n] == 1)
  62.          {
  63.           if (*val < 120)
  64.         {
  65.          *val = 120;
  66.          *i = ti[0];
  67.          *j = tj[0];
  68.            }
  69.         }
  70.        else
  71.          for (u = 0; u < l[m][n]; u++)
  72.            for (v = 0; v < l[m][n]; v++)
  73.           if (u != v)
  74.             {
  75.              lib = 0;
  76.              countlib(ti[u], tj[u], mymove);
  77.              if (lib > 0) /* valid move */
  78.                {
  79.                         lib1 = lib;
  80.             p[ti[u]][tj[u]] = mymove;
  81.             /* look ahead opponent move */
  82.             lib = 0;
  83.             countlib(ti[v], tj[v], umove);
  84.             if ((lib1 == 1) && (lib > 0))
  85.                           tval = 0;
  86.                         else
  87.                           tval = 120 - 20 * lib;
  88.             if (*val < tval)
  89.               {
  90.                *val = tval;
  91.                *i = ti[u];
  92.                *j = tj[u];
  93.              }
  94.             p[ti[u]][tj[u]] = EMPTY;
  95.               }
  96.            }
  97.      }
  98.       }
  99.  if (*val > 0)    /* find move */
  100.     return 1;
  101.  else  /* fail to find winner */
  102.     return 0;
  103. }  /* end findwinner */
  104.